/*
 * ImagenesHelper.java
 *
 * Created on 26 de septiembre de 2006, 17:16
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package com.src.computec.facturacion.noclass.helper;

import com.src.computec.facturacion.base.helper.BaseHelper;
import com.src.computec.facturacion.noclass.dao.BaseNoClassDAO;
import com.src.computec.facturacion.noclass.dto.ClasificacionDetalladaDto;
import com.src.computec.facturacion.noclass.dto.ClasificacionDto;
import com.src.computec.facturacion.noclass.dto.DepartamentoDto;
import com.src.computec.facturacion.noclass.dto.MunicipioCentroPobladoDto;
import com.src.computec.facturacion.noclass.dto.NodoDistribucionDto;
import com.src.computec.facturacion.noclass.exception.NoClassException;
import com.src.computec.facturacion.precosto.dto.OrdenProcesoDto;
import com.src.computec.radar.services.base.constantes.ConstantesGenerales;
import com.src.computec.radar.services.source.CoreServicesSource;
import com.src.computec.radar.services.utilities.actualizaciones.delegate.ActualizacionesDelegate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;


/**
 *
 * @author root
 */
public class NoClassHelper extends BaseHelper
{
    
    /** Creates a new instance of NoClassHelper */
    public NoClassHelper() {
    }
    
    public List getOrdenesProcesoNoClass(String filter) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getOrdenesProcesoNoClass(filter);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getOrdenesProcesoNoClass: " + e.toString());
        }
    }  
    
    public List getDepartamentos() throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getDepartamentos();
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getDepartamentos: " + e.toString());
        }
    }  
    
    public List getMunicipiosByDepartamento(DepartamentoDto departamentoDto) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getMunicipiosByDepartamento(departamentoDto);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getMunicipiosByDepartamento: " + e.toString());
        }
    }  
    
    public List getNodosEmpresasMensajeria() throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getNodosEmpresasMensajeria();
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getNodosEmpresasMensajeria: " + e.toString());
        }
    }  
    
    public DepartamentoDto getDepartamentoByPrimaryKey(DepartamentoDto departamentoDto) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getDepartamentoByPrimaryKey(departamentoDto);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getDepartamentoByPrimaryKey: " + e.toString());
        }
    }  
     
     public MunicipioCentroPobladoDto getMunicipioByPrimaryKey(MunicipioCentroPobladoDto municipioCentroPobladoDto) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getMunicipioByPrimaryKey(municipioCentroPobladoDto);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getMunicipioByPrimaryKey: " + e.toString());
        }
    }  
     
    public NodoDistribucionDto getNodoEmpresaMensajeriaByPrimaryKey(NodoDistribucionDto nodoDistribucionDto) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getNodoEmpresaMensajeriaByPrimaryKey(nodoDistribucionDto);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getNodoEmpresaMensajeriaByPrimaryKey: " + e.toString());
        }
    }  
    
    public List getSitiosOriginalesSinClasificarByOrdenes(List ordenesLst) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getSitiosOriginalesSinClasificarByOrdenes(ordenesLst);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getSitiosOriginalesSinClasificarByOrdenes: " + e.toString());
        }
    } 
    
    public List getNodosEmpresasMensajeriaByOrdenesProceso(List ordenesLst) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getNodosEmpresasMensajeriaByOrdenesProceso(ordenesLst);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getNodosEmpresasMensajeriaByOrdenesProceso: " + e.toString());
        }
    } 
            
    public List clasificarEnvios(List enviosNoClass) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            List list_= dao.clasificarEnvios(enviosNoClass);
	    List retList=null;
	    if(list_.size()>1){
		ActualizacionesDelegate actDelegate=new ActualizacionesDelegate();
		ConstantesGenerales.getInstance();
		String strNoClass=ConstantesGenerales.DESC_BASE_EM_NOCLASS;
		String codigoBase_=ConstantesGenerales.TIPO_BASE_EM_NOCLASS;
		retList= (ArrayList)list_.get(0);
		List baseEm_= (ArrayList)list_.get(1);
		for(Iterator it=baseEm_.iterator();it.hasNext();){
		    HashMap hashBase_=(HashMap)it.next();		
		    for(Iterator itHash=hashBase_.keySet().iterator();itHash.hasNext();){
			String key_=(String)itHash.next();
			ArrayList baseList_=(ArrayList)hashBase_.get(key_);		
			String[] splitArray_=key_.split("-");
			if(splitArray_.length==2 && baseList_.size()>0){
			    String numOrden_=splitArray_[0];
			    String codigoNodo_=splitArray_[1];
			    actDelegate.crearExcelBase(baseList_, numOrden_, codigoNodo_, strNoClass,codigoBase_);
			}
		    }
		}
	    }else if(list_.size()==1){
		retList= (ArrayList)list_.get(0);
	    }
	    return retList;
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:clasificarEnvios: " + e.toString());
        }
    }  
    
    public void retenerEnviosBySitioOriginal(ClasificacionDto clasificacionDto) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            dao.retenerEnviosBySitioOriginal(clasificacionDto);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:retenerEnviosBySitioOriginal: " + e.toString());
        }
    }  
    
    /////////////////////// No Class detallado por codigo de barras
    public List getCodigosBarrasSinClasificarByOrdenes(List ordenesLst) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getCodigosBarrasSinClasificarByOrdenes(ordenesLst);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getCodigosBarrasSinClasificarByOrdenes: " + e.toString());
        }
    }   
     
    public List clasificarCodigosBarras(List enviosNoClass) throws NoClassException {
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            List list_ = dao.clasificarCodigosBarras(enviosNoClass);
	    List retList=null;
	    if(list_.size()>1){
		ActualizacionesDelegate actDelegate=new ActualizacionesDelegate();
		ConstantesGenerales.getInstance();
		String strNoClass=ConstantesGenerales.DESC_BASE_EM_NOCLASS;
		String codigoBase_=ConstantesGenerales.TIPO_BASE_EM_NOCLASS;
		retList= (ArrayList)list_.get(0);
		List baseEm_= (ArrayList)list_.get(1);
		for(Iterator it=baseEm_.iterator();it.hasNext();){
		    HashMap hashBase_=(HashMap)it.next();		
		    for(Iterator itHash=hashBase_.keySet().iterator();itHash.hasNext();){
			String key_=(String)itHash.next();
			ArrayList baseList_=(ArrayList)hashBase_.get(key_);		
			String[] splitArray_=key_.split("-");
			if(splitArray_.length==2 && baseList_.size()>0){
			    String numOrden_=splitArray_[0];
			    String codigoNodo_=splitArray_[1];
			    actDelegate.crearExcelBase(baseList_, numOrden_, codigoNodo_, strNoClass,codigoBase_);
			}
		    }
		}
	    }else if(list_.size()==1){
		retList= (ArrayList)list_.get(0);
	    }
	    return retList;
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:clasificarCodigosBarras: " + e.toString());
        }
    }  
     
    public void retenerEnviosByCodigoBarras(ClasificacionDetalladaDto clasificacionDetalladaDto) throws NoClassException{
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            dao.retenerEnviosByCodigoBarras(clasificacionDetalladaDto);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:retenerEnviosByCodigoBarras: " + e.toString());
        }
    } 
    
    public List getNodosEmpresasMensajeriaNoAsociados(OrdenProcesoDto ordenProcesoDto) throws NoClassException{
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            return dao.getNodosEmpresasMensajeriaNoAsociados(ordenProcesoDto);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:getNodosEmpresasMensajeriaNoAsociados: " + e.toString());
        }
    } 
    
    public void asociarOrdenProcesoNodo(OrdenProcesoDto ordenProcesoDto) throws NoClassException{
        try {
            BaseNoClassDAO dao = this.getFactoryDAO().getNoClassDAO();
            dao.asociarOrdenProcesoNodo(ordenProcesoDto);
        }
        catch (Exception e) {
            throw new NoClassException("NoClassHelper:asociarOrdenProcesoNodo: " + e.toString());
        }
    } 
}
